package com.gotloop.dto;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

/**
 * Loop Data Transfer Object.
 * @author jibhaine
 *
 */
@XmlRootElement
public class LoopDTO extends AbstractDTO implements Serializable {

	/**
	 * Generated Serial Version UID.
	 */
	private static final long serialVersionUID = 2273244283449428565L;

	/**
	 * Loop author.
	 */
	private String author;
	
	/**
	 * Loop title.
	 */
	private String title;
	
	/**
	 * Loop title in url format.
	 */
	private String url;
	
	/**
	 * Loop description.
	 */
	private String description;
	
	/**
	 * List of tags.
	 */
	private List<String> tags;
	/**
	 * Loop start Time.
	 */
	private double startTime;
	/**
	 * Loop end Time.
	 */
	private double endTime;
	/**
	 * Beats per minute of the Loop.
	 */
	private int bpm;
	/**
	 * True if published.
	 */
	private boolean published;
	/**
	 * Date of loop creation.
	 */
	private Date creationDate;
	/**
	 * Date of loop modification.
	 */
	private Date modificationDate;
	
	/**
	 * List of comments made on this loop.
	 */
	private List<CommentDTO> comments;
	
	
	/**
	 * Get accessor for author.
	 * @return the author to get
	 */
	public String getAuthor() {
		return author;
	}
	/**
	 * Set accessor for author.
	 * @param pAuthor the author to set
	 */
	public void setAuthor(String pAuthor) {
		this.author = pAuthor;
	}
	/**
	 * Get accessor for title.
	 * @return the title to get
	 */
	public String getTitle() {
		return title;
	}
	/**
	 * Set accessor for title.
	 * @param pTitle the title to set
	 */
	public void setTitle(String pTitle) {
		this.title = pTitle;
	}
	/**
	 * Get accessor for url.
	 * @return the url to get
	 */
	public String getUrl() {
		return url;
	}
	/**
	 * Set accessor for url.
	 * @param pUrl the url to set
	 */
	public void setUrl(String pUrl) {
		this.url = pUrl;
	}
	/**
	 * Get accessor for description.
	 * @return the description to get
	 */
	public String getDescription() {
		return description;
	}
	/**
	 * Set accessor for description.
	 * @param pDescription the description to set
	 */
	public void setDescription(String pDescription) {
		this.description = pDescription;
	}
	/**
	 * Get accessor for tags.
	 * @return the tags to get
	 */
	public List<String> getTags() {
		return tags;
	}
	/**
	 * Set accessor for tags.
	 * @param pTags the tags to set
	 */
	public void setTags(List<String> pTags) {
		this.tags = pTags;
	}
	/**
	 * Get accessor for startTime.
	 * @return the startTime to get
	 */
	public double getStartTime() {
		return startTime;
	}
	/**
	 * Set accessor for startTime.
	 * @param pStartTime the startTime to set
	 */
	public void setStartTime(double pStartTime) {
		this.startTime = pStartTime;
	}
	/**
	 * Get accessor for endTime.
	 * @return the endTime to get
	 */
	public double getEndTime() {
		return endTime;
	}
	/**
	 * Set accessor for endTime.
	 * @param pEndTime the endTime to set
	 */
	public void setEndTime(double pEndTime) {
		this.endTime = pEndTime;
	}
	/**
	 * Get accessor for bpm.
	 * @return the bpm to get
	 */
	public int getBpm() {
		return bpm;
	}
	/**
	 * Set accessor for bpm.
	 * @param pBpm the bpm to set
	 */
	public void setBpm(int pBpm) {
		this.bpm = pBpm;
	}
	/**
	 * Get accessor for published.
	 * @return the published to get
	 */
	public boolean isPublished() {
		return published;
	}
	/**
	 * Set accessor for published.
	 * @param pPublished the published to set
	 */
	public void setPublished(boolean pPublished) {
		this.published = pPublished;
	}
	/**
	 * Get accessor for creationDate.
	 * @return the creationDate to get
	 */
	public Date getCreationDate() {
		return creationDate;
	}
	/**
	 * Set accessor for creationDate.
	 * @param pCreationDate the creationDate to set
	 */
	public void setCreationDate(Date pCreationDate) {
		this.creationDate = pCreationDate;
	}
	/**
	 * Get accessor for modificationDate.
	 * @return the modificationDate to get
	 */
	public Date getModificationDate() {
		return modificationDate;
	}
	/**
	 * Set accessor for modificationDate.
	 * @param pModificationDate the modificationDate to set
	 */
	public void setModificationDate(Date pModificationDate) {
		this.modificationDate = pModificationDate;
	}
	/**
	 * Get accessor for comments.
	 * @return the comments to get
	 */
	public List<CommentDTO> getComments() {
		return comments;
	}
	/**
	 * Set accessor for comments.
	 * @param pComments the comments to set
	 */
	public void setComments(List<CommentDTO> pComments) {
		this.comments = pComments;
	}

}
